package org.atfeihu.springcloud.java8;

import org.atfeihu.springcloud.entity.MyTestEntity;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author wangfeihu
 * @create 2021/9/5 1:50
 */
public class FunctionDemo {

    /**
     * Function 接口是一个功能型接口，它的一个作用就是转换作用，将输入数据转换成另一种形式的输出数据。
     */
    @Test
    public void testFunction() {
        /*Function<String, Integer> function = new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return s.length();
            }
        };
        System.out.println(function.apply("123456"));*/

        Function<String, Integer> function = s -> s.length();
        System.out.println(function.apply("123456"));
        Stream.of("aaa", "bbbb", "ccccc").map(function).forEach(System.out::println);
        // 在 Function 接口的重要应用不得不说 Stream 类的 map 方法了, map 方法传入一个 Function 接口, 返回一个转换后的 Stream类
    }

    @Test
    public void test() {
        Function<MyTestEntity, Long> function = entity -> entity.getId();
        ArrayList<MyTestEntity> list = new ArrayList<>();
        list.add(new MyTestEntity(1001L, "王小虎1"));
        list.add(new MyTestEntity(1002L, "王小虎2"));
        list.add(new MyTestEntity(1003L, "王小虎3"));
        list.add(new MyTestEntity(1004L, "王小虎4"));

        List<Long> collect = list.stream().map(function).collect(Collectors.toList());
        System.out.println(collect);
    }
}
